package com.framework.controller.file;

import cn.dev33.satoken.util.SaResult;
import com.framework.dto.MergeFileDTO;
import com.framework.dto.PageRequestDTO;
import com.framework.entity.MergeFile;
import com.framework.service.MergeFileService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.Objects;
import java.util.UUID;

/**
 * @Description: 总文件接口
 * @Author: JamesYao
 * @DateTime: 2024/2/2 18:35
 */
@RequiredArgsConstructor
@RestController
@RequestMapping("/merge/")
public class MergeFileController {

    private final MergeFileService mergeFileService;

    /**
     * 根据用户ID获取合并文件
     *
     * @return 合并文件结果
     */
    @GetMapping("sumFile/{pid}")
    public SaResult getSumFileByUserIdAndPid(@PathVariable("pid") String pid) {
        if (Objects.isNull(pid)){
            return SaResult.error("pid不能为空");
        }
        return mergeFileService.getMergeByUserIdAndPid(pid);
    }

    /**
     * 根据用户已删除文件
     *
     * @return 已删除的合并文件结果
     */
    @PostMapping("deleteSumFile")
    public SaResult getDeleteSumFileByUserIdAndPid(@RequestBody PageRequestDTO pageRequestDTO) {
        return mergeFileService.getDeleteMergeByUserIdAndPid(pageRequestDTO);
    }

    /**
     * 新建文件夹
     *
     */
    @PostMapping("newFolder")
    public SaResult newFolder(@RequestBody MergeFile file) {
        return mergeFileService.newFolder(file);
    }

    /**
     * 根据文件ID删除文件（直接删除）
     * @param fileId 文件ID
     * @return 删除结果
     */
    @DeleteMapping("deleteFile/{fileId}")
    public SaResult deleteFileByFileId(@PathVariable("fileId") String fileId) {
        return mergeFileService.deleteFileByFileId(fileId);
    }

    /**
     * 通过文件ID删除文件（假删，添加deletedAt）
     * @param fileId 文件ID
     * @return 删除结果
     */
    @PostMapping("fakeDelete/{fileId}")
    public SaResult fakeDeleteFileByFileId(@PathVariable("fileId") String fileId) {
        mergeFileService.fakeDeleteFileByFileId(fileId);
        return SaResult.ok();
    }

    /**
     * 通过文件ID恢复文件
     * @param fileId 文件ID
     * @return 恢复结果
     */
    @GetMapping("recover/{fileId}")
    public SaResult recoverFileByFileId(@PathVariable("fileId") String fileId) {
        if(Objects.isNull(fileId)){
            return SaResult.error("文件ID不能为空");
        }
        mergeFileService.recoverFileByFileId(fileId);
        return SaResult.ok("文件恢复成功");
    }

    /**
     * 重命名文件
     * @param file 合并文件DTO对象
     * @return SaResult对象，包含重命名结果
     */
    @PutMapping("rename")
    public SaResult renameFile(@RequestBody MergeFileDTO file) {
        if(Objects.isNull(file)){
            return SaResult.error("文件不能为空");
        }
        mergeFileService.renameMergeFile(file);
        return SaResult.ok("文件重命名成功");
    }

}
